package cn.zl.common.controller;

import cn.zl.biz.entity.SysUser;
import com.baomidou.mybatisplus.core.metadata.IPage;
import org.apache.shiro.SecurityUtils;
import org.apache.shiro.authc.AuthenticationToken;
import org.apache.shiro.session.Session;
import org.apache.shiro.subject.Subject;

import java.util.HashMap;
import java.util.Map;

/**
 * Controller层公共方法提取
 * 基础的控制器类
 * @author zl
 * @date 2023/9/12
 */
public class BaseController {

    //返回当前用户的主题对象,包括身份和状态
    protected static Subject getSubject() {
        return SecurityUtils.getSubject();
    }

    //返回当前登录用户的信息
    protected SysUser getCurrentUser() {
        return (SysUser) getSubject().getPrincipal();
    }

    //返回当前用户的会话信息
    protected Session getSession() {
        return getSubject().getSession();
    }

    //返回当前用户的会话对象 Session，可以指定是否创建新的会话
    protected Session getSession(Boolean flag) {
        return getSubject().getSession(flag);
    }

    //执行用户登录操作
    protected void login(AuthenticationToken token) {
        getSubject().login(token);
    }

    //将 MyBatis Plus 的分页查询结果转化为前端需要的数据格式
    public Map<String, Object> getData(IPage<?> page) {
        Map<String, Object> data = new HashMap<>();
        data.put("rows", page.getRecords());
        data.put("total", page.getTotal());
        return data;
    }

    //获取当前用户的会话 ID
    public Map<String, Object> getToken() {
        Map<String, Object> map = new HashMap<>();
        map.put("token", getSession().getId());
        return map;
    }

}
